Python
itemRegistry.getItem("My_Item")
# or
ir.getItem("My_Item")
JavaScript
itemRegistry.getItem("My_Item")
// or
ir.getItem("My_Item")
Groovy
itemRegistry.getItem("My_Item")
// or
ir.getItem("My_Item")
Rules DSL
My_Item
Python
items["My_Item"]
# or after importing anything within the ``core`` package
items.My_Item
# or
ir.getItem("My_Item").state
JavaScript
items["My_Item"]
// or
ir.getItem("My_Item").state
Groovy
items["My_Item"]
// or
ir.getItem("My_Item").state
Rules DSL
My_Item.state
Python
ir.getItem(event.itemName)
JavaScript
ir.getItem(event.itemName)
Groovy
ir.getItem(event.itemName)
Rules DSL
triggeringItem
Python
event.itemName
JavaScript
event.itemName
Groovy
event.itemName
Rules DSL
triggeringItem.name
Python
event.itemState
JavaScript
event.itemState
Groovy
event.itemState
Rules DSL
triggeringItem.state
Python
event.oldItemState
JavaScript
event.oldItemState
Groovy
event.oldItemState
Rules DSL
previousState
Python
event.itemCommand
JavaScript
event.itemCommand
Groovy
event.itemCommand
Rules DSL
receivedCommand
Python
events.sendCommand("Test_SwitchItem", "ON")
# or
events.sendCommand(ir.getItem("Test_SwitchItem"), ON)
JavaScript
events.sendCommand("Test_SwitchItem", "ON")
// or
events.sendCommand(ir.getItem("Test_SwitchItem"), ON)
Groovy
events.sendCommand("Test_SwitchItem", "ON")
// or
events.sendCommand(ir.getItem("Test_SwitchItem"), ON)
Rules DSL
Test_SwitchItem.sendCommand(ON)
// or
sendCommand("Test_SwitchItem", "ON")
Python
events.postUpdate("Test_SwitchItem", "ON")
JavaScript
events.postUpdate("Test_SwitchItem", "ON")
Groovy
events.postUpdate("Test_SwitchItem", "ON")
Rules DSL
Test_SwitchItem.postUpdate(ON)
// or
postUpdate("Test_SwitchItem", "ON")
Python
if isinstance(items[event.itemName], UnDefType):
return
# do stuff
JavaScript
if (items[event.itemName].class == UnDefType.class) {
return
} else {
// do stuff
}
Groovy
TODO
Rules DSL
if (triggeringItem.state == NULL || triggeringItem.state == UNDEF) {
return
} else {
// do stuff
}
Python
items["String_Item"] == StringType("test string")
items["Number_Item"] > DecimalType(5)
items["Temperature_Item"] > QuantityType(u"55 °F")
event.itemState <= DecimalType(event.oldItemState.intValue() + 60)
event.itemState <= DecimalType(event.oldItemState.doubleValue() + 60)
event.itemState <= DecimalType(event.oldItemState.floatValue() + 60)
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
int(str(items["Number_Item1"])) + int(str(items["Number_Item2"])) > 5
items["Number_Item1"].intValue() + items["Number_Item2"].intValue() > 5
float(str(items["Number_Item"])) + 5.5555 > 55.555
items["Number_Item"].floatValue() + 5.5555 > 55.555
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Follow the formatting syntax from: https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax
Python
str = items["DateTime_Item"].format("%1$tR")
str = items["Number_Item"].format("%.2f")
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
# just direct members, which could include groups
ir.getItem("gTest").members
# iteratively, all child Items and the child Items of all child groups
ir.getItem("gTest").allMembers
JavaScript
// just direct members, which could include groups
ir.getItem("gTest").members
// iteratively, all child Items and the child Items of all child groups
ir.getItem("gTest").allMembers
Groovy
// just direct members, which could include groups
ir.getItem("gTest").members
// iteratively, all child Items and the child Items of all child groups
ir.getItem("gTest").allMembers
Rules DSL
// just direct members, which could include groups
gTest.members
// iteratively, all child Items and the child Items of all child groups
gTest.allMembers
Python
list_of_items = [item.name for item in itemRegistry.getItem("gDS_FamilyRoom").members if "gMotion_Sensor" in item.groupNames]
# or
list_of_items = [item for item in itemRegistry.getItem("gDS_FamilyRoom").members if item in itemRegistry.getItem("gMotion_Sensor").members]
# or
list_of_items = [item.name for item in itemRegistry.getItem("gMotion_Sensor").members if item in itemRegistry.getItem("gDownstairs").allMembers]
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
for item in ir.getItem("gTest").members:
# do stuff
JavaScript
TODO
Groovy
TODO
Rules DSL
gTest.members.forEach[item |
// do stuff
]
Python
Returns a list of Items, not a GroupItem
listOfMembers = filter(lambda item: item.state == ON, ir.getItem("gTest").members)
# or using a list comprehension
listOfMembers = [item for item in ir.getItem("gTest").members if item.state == ON]
JavaScript
TODO
Groovy
TODO
Rules DSL
Returns a GrouptItem
val listOfMembers = gTest.members.filter(GenericItem item | item.state == ON)
Python
my_item = filter(lambda item: item.state == ON, ir.getItem("gTest").members)[0]
# or using a list comprehension
my_item = [item for item in ir.getItem("gTest").members if item.state == ON][0]
JavaScript
TODO
Groovy
TODO
Rules DSL
val myItem = gTest.members.findFirst(item.state == ON)
Python
Returns a list of Items
my_items = filter(lambda item: item.state == OFF, ir.getItem("gTest").members)[0:5]
# or using a list comprehension
my_items = [item for item in ir.getItem("gTest").members if item.state == ON][0:5]
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
Returns a list of Items
sorted_battery_level = sorted(battery for battery in ir.getItem("gBattery").getMembers() if battery.state < DecimalType(5), key = lambda battery: battery.state)
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
Returns a list of strings
battery_levels = map(lambda lowBattery: "{}: {}".format(lowBattery.label, str(lowBattery.state) + "%"), ir.getItem("gBattery").members)
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
Returns a value
# to use the add() method, the states must be of type QuantityType (`Units of Measure <https://www.openhab.org/docs/concepts/units-of-measurement.html>`_)
weekly_rainfall = reduce(lambda sum, x: sum.add(x), map(lambda rain: rain.state, ir.getItem("gRainWeeklyForecast").members))
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
Returns a string
lowBatteryMessage = "Warning! Low battery alert:\n\n{}".format(",\n".join(map(lambda lowBattery: "{}: {}".format(lowBattery.label,str(lowBattery.state) + "%"), sorted(battery for battery in ir.getItem("gBattery").getMembers() if battery.state < DecimalType(5), key = lambda battery: battery.state))))
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
# this is a single line comment
JavaScript
// this is a single line comment
Groovy
// this is a single line comment
Rules DSL
// this is a single line comment
Python
'''
this is
a multiline
comment
'''
JavaScript
/*
this is
a multiline
comment
*/
Groovy
/*
this is
a multiline
comment
*/
Rules DSL
/*
this is
a multiline
comment
*/
Python
# replace `object` with the object you'd like to introspect
log.debug("dir(object)=[{}]".format(dir(object)))
JavaScript
TODO
Groovy
// replace `object` with the object you'd like to introspect
object.properties.each{log.warn("object: " + it)}
Rules DSL
Not possible
Python
log.debug("dir()=[{}]".format(dir()))
JavaScript
Not possible
Groovy
TODO
Rules DSL
Not possible
Python
ruleUID = filter(lambda rule: rule.name == "This is the name of my rule", rules.getAll())[0].UID
# or using a list comprehension
ruleUID = [rule for rule in rules.getAll() if rule.name == "This is the name of my rule"][0].UID
JavaScript
TODO
Groovy
TODO
Rules DSL
Not possible
Python
from core import osgi
ruleEngine = osgi.get_service("org.openhab.core.automation.RuleManager") or osgi.get_service("org.eclipse.smarthome.automation.RuleManager")
ruleEngine.setEnabled(ruleUID, True)# enable rule
ruleEngine.setEnabled(ruleUID, False)# disable rule
JavaScript
TODO
Groovy
TODO
Rules DSL
Not possible
Python
from core import osgi
ruleEngine = osgi.get_service("org.openhab.core.automation.RuleManager") or osgi.get_service("org.eclipse.smarthome.automation.RuleManager")
ruleEngine.runNow(ruleFunction.UID)
consider_conditions = True# consider the rule's Conditions
ruleEngine.runNow(ruleFunction.UID, considerConditions, {'name': 'EXAMPLE'})
JavaScript
TODO
Groovy
TODO
Rules DSL
Not possible
Python
from org.eclipse.smarthome.core.thing import ThingUID
thing_status = things.get(ThingUID('kodi:kodi:familyroom')).status
JavaScript
var ThingUID = Java.type("org.eclipse.smarthome.core.thing.ThingUID");
var thingStatus = things.get(new ThingUID('kodi:kodi:familyroom')).status;
Groovy
TODO
Rules DSL
var thingStatus = getThingStatusInfo('kodi:kodi:familyroom').status
Python
from core.log import logging, LOG_PREFIX
log = logging.getLogger("{}.TEST".format(LOG_PREFIX))
from core import osgi
try:
from org.openhab.core.thing import Thing UID
except:
from org.eclipse.smarthome.core.thing import ThingUID
thing_manager = osgi.get_service("org.openhab.core.thing.ThingManager") or osgi.get_service("org.eclipse.smarthome.core.thing.ThingManager")
kodi_thing = things.get(ThingUID("kodi:kodi:familyroom"))
thing_manager.setEnabled(ThingUID("kodi:kodi:familyroom"), False)# disable Thing
log.debug("Disabled: isEnabled [{}], statusInfo [{}]".format(kodi_thing.isEnabled(), kodi_thing.statusInfo))
thing_manager.setEnabled(ThingUID("kodi:kodi:familyroom"), True)# enable Thing
log.debug("Enabled: isEnabled [{}], statusInfo [{}]".format(kodi_thing.isEnabled(), kodi_thing.statusInfo))
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
Python
See the examples in the module... ../Python/Core/Packages and Modules/metadata
JavaScript
TODO
Groovy
TODO
Rules DSL
Metadata can be added and removed, but not read
Python
from org.joda.time import DateTime
start = DateTime.now()
JavaScript
var DateTime = Java.type("org.joda.time.DateTime");
start = DateTime.now()
Groovy
import org.joda.time.DateTime
start = DateTime.now()
Rules DSL
now
Python
from time import sleep
sleep(5)# the unit is seconds, so use 0.5 for 500 milliseconds
JavaScript
TODO
Groovy
TODO
Rules DSL
Thread::sleep(5000)// the unit is milliseconds
Python
See the timer_example.py in the Script Examples for examples of using both Python threading.Timer and the openHAB createTimer Action.
JavaScript
TODO
Groovy
TODO
Rules DSL
TODO
See Guides/Logging:Logging
.
See Guides/Actions:Actions
.